java - 使检查异常成为 RuntimeException
全部标签 像我在Googleverse中看到的许多其他人一样,我成为了File.exists?陷阱的受害者,它当然会检查您的本地文件系统,而不是您要部署到的服务器。我发现了一个使用shellhack的结果,例如:if[[-d#{shared_path}/images]];then...但这对我来说不太合适,除非它被很好地包装在Ruby方法中。有没有人优雅地解决了这个问题? 最佳答案 在Capistrano3中,您可以:onroles(:all)doiftest("[-f/path/to/my/file]")#thefileexistselse
有没有办法通过Gem模块检查当前是否安装了某些gem?来自ruby代码,而不是通过执行“gemlist”...澄清-我不想加载库。我只想检查它是否可用,所以所有的rescueLoadError解决方案都对我没有帮助。此外,我不关心gem本身是否可以工作,只关心它是否已安装。 最佳答案 仅在Ruby1.9.3中还有:Gem.available?('somegem')您也可以使用正则表达式。如果我想允许“rcov”和GitHub变体如“relevance-rcov”,这很方便:Gem.available?(/-?rcov$/)
我有以下迁移,我希望能够检查当前与环境相关的数据库是否为mysql数据库。如果是mysql,那么我想执行特定于数据库的SQL。我该怎么做?classAddUsersFb 最佳答案 更短的通话时间ActiveRecord::Base.connection.adapter_name=='MySQL' 关于ruby-on-rails-如何检查Rails迁移中的数据库类型?,我们在StackOverflow上找到一个类似的问题: https://stackoverfl
是否可以在ruby/rails应用程序中检查当前加载的gem的gem版本?在调试期间,我希望能够执行如下操作:putsRubyGem.loaded_version(:active_support)有这样的东西吗? 最佳答案 putsGem.loaded_specs["activesupport"].version 关于ruby-你如何在运行时检查Ruby中的Gem版本?,我们在StackOverflow上找到一个类似的问题: https://stackov
我在Rails中的模型上定义了一个自定义异常,作为一种包装异常:(begin[code]rescue[raisecustomexception]end)当我引发异常时,我想将一些信息传递给它:a)其内部函数引发错误的模型实例,以及b)被捕获的错误。这是通过POST请求从外部数据源填充的模型的自动导入方法。tldr;如果您自己定义异常,如何将参数传递给异常?我在该异常上有一个初始化方法,但raise语法似乎只接受异常类和消息,没有传递到实例化过程中的可选参数。 最佳答案 使用new创建异常实例:classCustomException
如果有不止一种方法,请列出它们。我只知道一个,但我想知道是否有更简洁的Ruby方式。 最佳答案 Process.getpgid和Process::kill方法之间的区别似乎是当pid存在但由另一个用户拥有时会发生什么。Process.getpgid将返回一个答案,Process::kill将抛出一个异常(Errno::EPERM)。基于此,我推荐Process.getpgid,如果只是因为它可以让您不必捕获两个不同的异常。这是我使用的代码:beginProcess.getpgid(pid)truerescueErrno::ESRCH
从Net::HTTP中拯救异常的最佳方法是什么?抛出的异常在Ruby的socket.c中有描述。,比如Errno::ETIMEDOUT,Errno::ECONNRESET,和Errno::ECONNREFUSED.所有这些的基类是SystemCallError,但写出如下代码感觉很奇怪,因为SystemCallError似乎距离制作HTTP还很遥远调用:beginresponse=Net::HTTP.get_response(uri)response.code=="200"rescueSystemCallErrorfalseend只有我吗?除了修复Net::HTTP之外,还有更好的方法
我正在通过rubykoans,我在151上,我刚撞到一堵砖墙。这是公案:#Youneedtowritethetrianglemethodinthefile'triangle.rb'require'triangle.rb'classAboutTriangleProject2然后在triangle.rb中我们有:deftriangle(a,b,c)#WRITETHISCODEifa==b&&a==creturn:equilateralendif(a==b&&a!=c)||(a==c&&a!=b)||(b==c&&b!=a)return:isoscelesendifa!=b&&a!=c&
考虑以下ruby代码测试.rb:beginputsthisFunctionDoesNotExistx=1+1rescueException=>epeend出于调试目的,我希望救援block知道错误发生在该文件的第4行。有干净的方法吗? 最佳答案 pe.backtrace我在没有来源的IRBsession上运行它,但它仍然提供了相关信息。=>["(irb):11:in`foo'","(irb):17:in`irb_binding'","/usr/lib64/ruby/1.8/irb/workspace.rb:52:in`irb_b
我试图理解Ruby中的异常,但我有点困惑。我正在使用的教程说,如果发生与救援语句识别的任何异常都不匹配的异常,您可以使用“else”来捕获它:begin#-rescueOneTypeOfException#-rescueAnotherTypeOfException#-else#Otherexceptionsensure#Alwayswillbeexecutedend但是,我也看到在教程后面的“rescue”中没有指定异常就被使用了:beginfile=open("/unexistant_file")iffileputs"Fileopenedsuccessfully"endrescuef